﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Linq;

namespace AQMProject
{
    class RssManager
    {

        public void Insert(rssuebersicht rssuebersicht)
        {
            RssDAO op = new RssDAO();
            op.Insert(rssuebersicht);
        }

        public List<rssuebersicht> GetItems()
        {
            RssDAO op = new RssDAO();
            return op.SelectList();
        } 
        
        public List<RssItem> GetItems(string feedUrl)
        {
                XDocument doc = XDocument.Load(feedUrl);

                return (from x in doc.Descendants("channel").Descendants("item")
                        select new RssItem()
                        {
                            Title = x.Descendants("title").Single().Value,
                            Link = x.Descendants("link").Single().Value,
                            DatumUhrzeit = DateTime.Parse(x.Descendants("pubDate").Single().Value)
                        }).ToList();
        }

        public String getEmpfehlung(int empf_id)
        {
            RssDAO op = new RssDAO();
            return op.getEmpfehlung(empf_id);
        }

        public String getAction(int empf_id)
        {
            RssDAO op = new RssDAO();
            return op.getAction(empf_id);
        }

        public Decimal getFaktor(int empf_id)
        {
            RssDAO op = new RssDAO();
            return op.getFaktor(empf_id);
        }

        public DateTime getLastDateTime()
        {
            RssDAO op = new RssDAO();
            return op.getLastDateTime();
        }

        public void setLastDateTime(Einlesedaten dat)
        {
            RssDAO op = new RssDAO();
            op.setLastDateTime(dat);
        }

        public List<rssuebersicht> GetFiltertItems(DateTime l_startDate, DateTime l_endDate, String l_symbol, int l_bank_id, bool buysell)
        {
            using (AQMDataDataContext db = new AQMDataDataContext())
            {
                List<rssuebersicht> data = null;

                if (buysell)
                {

                    if (l_bank_id > 0)
                    {
                        data = (from c in db.rssuebersicht
                                where
                                c.DatumUhrzeit >= l_startDate &
                                c.DatumUhrzeit <= l_endDate &
                                c.DatumUhrzeit != null &
                                c.aktie_aktienkuerzel == l_symbol &
                                c.bank_idbank == l_bank_id &
                                (c.empfehlung_idempfehlung == 1 | c.empfehlung_idempfehlung == 2)
                                orderby c.DatumUhrzeit ascending
                                select c).ToList();
                    }
                    else
                    {
                        data = (from c in db.rssuebersicht
                                where
                                c.DatumUhrzeit >= l_startDate &
                                c.DatumUhrzeit <= l_endDate &
                                c.DatumUhrzeit != null &
                                c.aktie_aktienkuerzel == l_symbol &
                                (c.empfehlung_idempfehlung == 1 | c.empfehlung_idempfehlung == 2)
                                orderby c.DatumUhrzeit ascending
                                select c).ToList();
                    }

                }
                else
                {

                    if (l_bank_id > 0)
                    {
                        data = (from c in db.rssuebersicht
                                where
                                c.DatumUhrzeit >= l_startDate &
                                c.DatumUhrzeit <= l_endDate &
                                c.DatumUhrzeit != null &
                                c.aktie_aktienkuerzel == l_symbol &
                                c.bank_idbank == l_bank_id
                                orderby c.DatumUhrzeit ascending
                                select c).ToList();
                    }
                    else
                    {
                        data = (from c in db.rssuebersicht
                                where
                                c.DatumUhrzeit >= l_startDate &
                                c.DatumUhrzeit <= l_endDate &
                                c.DatumUhrzeit != null &
                                c.aktie_aktienkuerzel == l_symbol
                                orderby c.DatumUhrzeit ascending
                                select c).ToList();
                    }

                }


                return data;
            }
        }


        public void Delete(String rsslink)
        {
            RssDAO rss = new RssDAO();
            rss.Delete(rsslink);
        }
    }
}
